iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
Software Development

開心撰寫 PHPUnit系列 第 2

Day02. 土炮式單元測試 - Hello World

  • 分享至 

  • xImage
  •  

如何測試

其實測試很簡單,如Day01提到的在『編輯器裡寫完code後再到瀏覽器按F5』,所以我們可以寫出我們的第一個測試

找個資料夾打開檔案為 index.php,並撰寫以下程式碼

<?php

echo 'hello world!!!';

執行 php index.php,我們就可以看到輸出結果如下

❯ php index.php
hello world!!!

我們就可以用『眼睛』來確認程式執行是否正確,這是不是和『編輯器裡寫完code後再到瀏覽器按F5』幾乎一模一樣,只是我們把瀏覽器按F5改為執行php index.php,用這樣的方式進行開發(也等同於測試),就可以大幅度的減少瀏覽器 reload 的時間,也等同於加速開發時間啊(每次reload要花費2秒來計,每次節省1秒,每執行100次就省了100秒啊
)

等一下!這樣不對啊!!!

應該發現只有寫完程式並沒有任何的驗證啊!沒錯!以上的程式碼只是讓大家知道我們可以直接執行來進行開發,知道了這樣的開發方式後,我們就可以把程式碼改為

<?php
// index.php

class HelloWorld {
    public function greeting() {
        return 'hello world!!!';
    }
}

var_dump((new HelloWorld())->greeting());

再次執行程式會得到以下的結果

❯ php index.php
hello world!!!

咦?不是一樣嗎?我們可以接著再把程式碼進行修改,因為我們不想用眼睛來確認程式是否正確,所以程式碼可以改為

<?php
// index.php

class HelloWorld {
    public function greeting() {
        return 'hello world!!!';
    }
}

var_dump("hello world!!!" === (new HelloWorld())->greeting());

接著再次執行 php index.php,會得到以下結果

❯ php index.php
bool(true)

這樣還是不對啊!我希望執行結果是顯示hello world!!!

所以我們可以再把程式進行改寫

<?php
// HelloWorld.php

class HelloWorld
{
    public function greeting()
    {
        return 'hello world!!!';
    }
}
<?php
// index.php

require_once(__DIR__ . '/HelloWorld.php');

echo (new HelloWorld())->greeting();
<?php
// HelloWorldTest.php

require_once(__DIR__ . '/HelloWorld.php');

var_dump("hello world!!!" === (new HelloWorld())->greeting());

這樣把檔案拆成三個檔案後,我們就可以得到

  • 正確的輸出結果
  • 驗證程式正確性

結論

當我們把確認程式執行結果從瀏覽器移到 cli 後會發現不但等待時間減少了,其餘的和平常開發的形式一模一樣,再透過簡單的重構可以再讓程式獲得保護,而且還是用很土炮的方式來進行,所以當程式有誤的時候我們沒有辦法得到更多的錯誤提示,下一篇我們再導入 PHPUnit 再進行一次開發看會得到什麼樣的體驗。


上一篇
Day01. 前言
下一篇
Day03. PHPUnit 單元測試 - Hello World
系列文
開心撰寫 PHPUnit30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言